/*
 * ========================================================== MobilyBlocks date:
 * 29.11.2010 last update: 25.1.2011 author: Marcin Dziewulski web:
 * http://www.mobily.pl or http://playground.mobily.pl email: hello@mobily.pl
 * Free to use under the MIT license.
 * ==========================================================
 */
(function($) {
	$.fn.mobilyblocks = function(options) {
		var defaults = {
			trigger : "click",
			direction : "clockwise",
			duration : 750,
			zIndex : 10,
			widthMultiplier : 1.2
		};
		var sets = $.extend({}, defaults, options);
		return this.each(function() {
			var $t = $(this), w = $t.width(), h = $t.height(), parent = $t
					.find("ul"), list = parent.find("li"), size = list.length, hov = false, dir;
			if (sets.direction == "clockwise") {
				dir = -1
			} else {
				if (sets.direction == "counter") {
					dir = 1
				}
			}
			var socials = {
				init : function() {
					parent.hide().css({
								zIndex : sets.zIndex
							});
					$t.append($("<a />").addClass("trigger").css({
								display : "block",
								position : "absolute",
								zIndex : 1,
								top : 0,
								left : 0,
								width : "100%",
								height : "100%"
							}));
					switch (sets.trigger) {
						case "click" :
							socials.click();
							break;
						case "hover" :
							socials.hover();
							break;
						default :
							socials.click()
					}
				},
				click : function() {
					var trigger = $t.find("a.trigger");
					trigger.bind("click", function() {
								if ($t.hasClass("close")) {
									parent.fadeTo(sets.duration, 0);
									socials.animation.close();
									$t.removeClass("close")
								} else {
									parent.fadeTo(sets.duration, 1);
									socials.animation.open();
									$t.addClass("close")
								}
								return false
							})
				},
				hover : function() {
					var trigger = $t.find("a.trigger");
					trigger.bind("mouseover", function() {
								if (hov == false) {
									parent.fadeTo(sets.duration, 1);
									socials.animation.open();
									$t.addClass("close")
								}
							});
					parent.bind("mouseleave", function() {
								$t.removeClass("close");
								parent.fadeTo(sets.duration, 0);
								socials.animation.close();
								hov = true;
								setTimeout(function() {
											hov = false
										}, 500)
							})
				},
				animation : {
					open : function() {
						socials.ie.open();
						list.each(function(i) {
							var li = $(this);
							li.animate({
										path : new $.path.arc({
													center : [0, 0],
													radius : w
															* sets.widthMultiplier,
													start : 0,
													end : 360 / size * i,
													dir : dir
												})
									}, sets.duration)
						});
						list.hover(function() {
									var li = $(this);
									li.css({
												zIndex : sets.zIndex
											}).siblings("li").css({
												zIndex : sets.zIndex - 1
											})
								})
					},
					close : function() {
						list.each(function(i) {
									var li = $(this);
									li.animate({
												top : 0,
												left : 0
											}, sets.duration, function() {
												socials.ie.close()
											})
								})
					}
				},
				ie : {
					open : function() {
						if ($.browser.msie) {
							list.show()
						}
					},
					close : function() {
						if ($.browser.msie) {
							list.hide()
						}
					}
				}
			};
			socials.init()
		})
	}
}(jQuery));
(function($) {
	$.path = {};
	$.path.arc = function(params) {
		for (var i in params) {
			this[i] = params[i]
		}
		this.dir = this.dir || 1;
		while (this.start > this.end && this.dir > 0) {
			this.start -= 360
		}
		while (this.start < this.end && this.dir < 0) {
			this.start += 360
		}
		this.css = function(p) {
			var a = this.start * (p) + this.end * (1 - (p));
			a = a * 3.1415927 / 180;
			var x = Math.sin(a) * this.radius + this.center[0];
			var y = Math.cos(a) * this.radius + this.center[1];
			return {
				top : y + "px",
				left : x + "px"
			}
		}
	};
	$.fx.step.path = function(fx) {
		var css = fx.end.css(1 - fx.pos);
		for (var i in css) {
			fx.elem.style[i] = css[i]
		}
	}
})(jQuery);